/*
 * Copyright (C) 2014 gujicheng
 * 未经作者许可，禁止将该程序用于商业用途
 * 
 * 该声波通信程序在前一个开源版本（SinVoice）的基础上，做了许多优化：
 * 优化如下：
 * 1. 识别效率更高，几乎达到100%，完全可以达到商业用途标准，比chirp，支付宝，茄子快传等软件的识别效率更高。
 * 2. 能支持更多复杂场景的识别，在有嘈杂大声的背景音乐，嘈杂的会议室，食堂，公交车，马路，施工场地，
 *     小汽车，KTV等一些复杂的环境下，依然能保持很高的识别率。
 * 3. 能支持更多token的识别，通过编码可以传送所有字符。
 * 4. 通过定制可以实现相同字符的连续传递,比如“234456”。
 * 5. 支持自动纠错功能，在有3个以内字符解码出错的情况下可以自动纠正。
 * 6. 程序运行效率非常高，可以用于智能手机，功能手机，嵌入式设备，PC，平板等嵌入式系统上。
 * 7. 声波的频率声音和音量可定制。
 * 
 * 此demo程序属于试用性质程序，仅具备部分功能，其限制如下：
 * 1. 仅支持部分字符识别。
 * 2. 识别若干次后，程序会自动停止识别。若想继续使用，请停止该程序，然后重新启动程序。
 * 3. 不支持连续字符传递。
 * 4. 不支持自动纠错功能。
 * 5. 禁止用于商业用途。
 * 
 * 若您对完整的声波通信程序感兴趣，请联系作者获取商业授权版本（仅收取苦逼的加班费）。
 *************************************************************************
 **                   作者信息                                                            **
 *************************************************************************
 ** Email: gujicheng197@126.com                                        **
 ** QQ   : 29600731                                                                 **
 ** Weibo: http://weibo.com/gujicheng197                          **
 *************************************************************************
 */
package com.libra.sinvoice;

import android.util.Log;

public class LogHelper {
    private static final String ROOT_TAG = "SinVoice";

    public static final int d(String classTag, String privateTag, String msg) {
        return Log.d(String.format("%s %s %s", ROOT_TAG, classTag, privateTag), msg);
    }

    public static final int d(String classTag, String msg) {
        return d(classTag, "", getLogInfo(msg));
    }

    public static final int i(String classTag, String privateTag, String msg) {
        return Log.i(String.format("%s %s %s", ROOT_TAG, classTag, privateTag), msg);
    }

    public static final int i(String classTag, String msg) {
        return i(classTag, "", getLogInfo(msg));
    }

    public static final int e(String classTag, String privateTag, String msg) {
        return Log.e(String.format("%s %s %s", ROOT_TAG, classTag, privateTag), msg);
    }

    public static final int e(String classTag, String msg) {
        return e(classTag, "", getLogInfo(msg));
    }

    public static final int v(String classTag, String privateTag, String msg) {
        return Log.v(String.format("%s %s %s", ROOT_TAG, classTag, privateTag), msg);
    }

    public static final int v(String classTag, String msg) {
        return v(classTag, "", getLogInfo(msg));
    }

    private static final String getLogInfo(String msg) {
        StackTraceElement traceElement = ((new Exception()).getStackTrace())[2];
        return String.format("File:%s, Function:%s, Line:%d, ThreadId:%d, %s", traceElement.getFileName(), traceElement.getMethodName(), traceElement.getLineNumber(), Thread.currentThread().getId(), msg);
    }
}
